package powerdev.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import powerdev.excepcion.DAOExcepcion;
import powerdev.modelo.Publicidad;
import powerdev.util.ConexionBD;

public class PublicidadDAO extends BaseDAO {
	
	public Collection<Publicidad> buscarPorTitulo(String no_Titulo) throws DAOExcepcion {
		System.out.println("PublicidadDAO: buscarPorTitulo(String no_Titulo)");
		String query = "SELECT co_Publicidad, no_Titulo, tx_Contenido, fe_inicioVigencia, fe_FinVigencia, ss_Tarifa, nu_Click, co_Persona, fl_Estado " +
				"FROM Publicidad WHERE no_Titulo like % ? %";
		Collection<Publicidad> lista = new ArrayList<Publicidad>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, no_Titulo);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Publicidad vo = new Publicidad();
				vo.setCo_Publicidad(rs.getInt("co_Publicidad"));
				vo.setNo_Titulo(rs.getString("no_Titulo"));
				vo.setTx_Contenido(rs.getString("tx_Contenido"));
				vo.setFe_inicioVigencia(rs.getDate("fe_inicioVigencia"));
				vo.setFe_FinVigencia(rs.getDate("fe_FinVigencia"));
				vo.setSs_Tarifa(rs.getDouble("ss_Tarifa"));
				vo.setNu_Click(rs.getInt("nu_Click"));
				vo.setFl_Estado(rs.getBoolean("fl_Estado"));
				lista.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return lista;
	}

	
 public void insertar(Publicidad vo, int co_Persona) throws DAOExcepcion {
		System.out.println("PublicidadDAO: insertar(Publicidad vo, int co_Persona)");
		String query = "INSERT INTO Publicidad(no_Titulo, tx_Contenido, fe_inicioVigencia, fe_FinVigencia, ss_Tarifa, nu_Click, co_Persona, fl_Estado) " +
				"VALUES (?,?,?,?,?,?,?,?)";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, vo.getNo_Titulo());
			stmt.setString(2, vo.getTx_Contenido());
			stmt.setDate(3, (Date) vo.getFe_inicioVigencia());
			stmt.setDate(4, (Date) vo.getFe_FinVigencia());
			stmt.setDouble(5, vo.getSs_Tarifa());
			stmt.setInt(6, vo.getNu_Click());
			stmt.setInt(7, co_Persona);
			stmt.setBoolean(8, vo.getFl_Estado());
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}

	public Publicidad obtener(int co_Publicidad) throws DAOExcepcion {
		System.out.println("PublicidadDAO: obtener(int co_Publicidad)");
		Publicidad vo = new Publicidad();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			String query = "SELECT co_Publicidad, no_Titulo, tx_Contenido, fe_inicioVigencia, fe_FinVigencia, ss_Tarifa, nu_Click, co_Persona, fl_Estado " +
				"FROM Publicidad WHERE co_Publicidad= ?";
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, co_Publicidad);
			
			rs = stmt.executeQuery();
			if (rs.next()) {
				
				vo.setCo_Publicidad(rs.getInt("co_Publicidad"));
				vo.setNo_Titulo(rs.getString("no_Titulo"));
				vo.setTx_Contenido(rs.getString("tx_Contenido"));
				vo.setFe_inicioVigencia(rs.getDate("fe_inicioVigencia"));
				vo.setFe_FinVigencia(rs.getDate("fe_FinVigencia"));
				vo.setSs_Tarifa(rs.getDouble("ss_Tarifa"));
				vo.setNu_Click(rs.getInt("nu_Click"));
				vo.setFl_Estado(rs.getBoolean("fl_Estado"));
				
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

	//  public void eliminar(String rolNombre) throws DAOExcepcion {
	//	System.out.println("RolDAO: eliminar(String rolNombre)");
	//	String query = "DELETE FROM rol WHERE rol_nombre=?";
	//	Connection con = null;
	//	PreparedStatement stmt = null;
	//	try {
	//		con = ConexionBD.obtenerConexion();
	//		stmt = con.prepareStatement(query);
	//		stmt.setString(1, rolNombre);
	//		int i = stmt.executeUpdate();
	//		if (i != 1) {
	//			throw new SQLException("No se pudo eliminar");
	//		}
	//	} catch (SQLException e) {
	//		System.err.println(e.getMessage());
	//		throw new DAOExcepcion(e.getMessage());
	//	} finally {
	//		this.cerrarStatement(stmt);
	//		this.cerrarConexion(con);
	//	}
	//	}  
	
	public void Anular_Publicidad(int co_Publicidad, Boolean fl_Estado) throws DAOExcepcion {
		System.out.println("PublicidadDAO: Anular_Publicidad(int co_Publicidad, Boolean fl_Estado)");
		String query = "update Publicidad set fl_Estado=? where co_Publicidad=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setBoolean(1, fl_Estado);
			stmt.setInt(2, co_Publicidad);
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}


	public void actualizar(Publicidad vo, int co_Persona) throws DAOExcepcion {
		System.out.println("PublicidadDAO: actualizar(Publicidad vo, int co_Persona)");
		String query = "update Publicidad set no_Titulo=?, tx_Contenido=?, fe_inicioVigencia=?, fe_FinVigencia=?, ss_Tarifa=?, nu_Click=?, co_Persona=?, " +
				"fl_Estado=? where co_Publicidad=?";
		Connection con = null;
		PreparedStatement stmt = null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, vo.getNo_Titulo());
			stmt.setString(2, vo.getTx_Contenido());
			stmt.setDate(3, (Date) vo.getFe_inicioVigencia());
			stmt.setDate(4, (Date) vo.getFe_FinVigencia());
			stmt.setDouble(5, vo.getSs_Tarifa());
			stmt.setInt(6, vo.getNu_Click());
			stmt.setInt(7, co_Persona);
			stmt.setBoolean(8, vo.getFl_Estado());
			stmt.setInt(9, vo.getCo_Publicidad());
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	}
	
	public Collection<Publicidad> listar() throws DAOExcepcion {
		System.out.println("PublicidadDAO: listar()");
		Collection<Publicidad> c = new ArrayList<Publicidad>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		try {
			con = ConexionBD.obtenerConexion();
			String query = "SELECT co_Publicidad, no_Titulo, tx_Contenido, fe_inicioVigencia, fe_FinVigencia, ss_Tarifa, nu_Click, co_Persona, fl_Estado " +
				"FROM Publicidad";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Publicidad vo = new Publicidad();
				vo.setCo_Publicidad(rs.getInt("co_Publicidad"));
				vo.setNo_Titulo(rs.getString("no_Titulo"));
				vo.setTx_Contenido(rs.getString("tx_Contenido"));
				vo.setFe_inicioVigencia(rs.getDate("fe_inicioVigencia"));
				vo.setFe_FinVigencia(rs.getDate("fe_FinVigencia"));
				vo.setSs_Tarifa(rs.getDouble("ss_Tarifa"));
				vo.setNu_Click(rs.getInt("nu_Click"));
				vo.setFl_Estado(rs.getBoolean("fl_Estado"));
				c.add(vo);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return c;
	}

	
}
